package cn.agiledata.bank.transaction.logic;

import java.util.Date;

import cn.agiledata.bank.transaction.exception.TransactionException;

/**
 * 批量导入文件管理器
 * 
 * @author maxianbo
 * 
 */
public interface BatchImportFileManager {

    /**
     * 读取指定账户下的所有导入文件的创建时间清单
     * 
     * @param accountId
     *            账户编号
     * @return 指定账户下的所有导入文件的创建时间清单
     * @throws TransactionException
     *             如果读取过程中出现错误
     */
    public Date[] loadCreateTimes(String accountId) throws TransactionException;

    /**
     * 读取指定账户下的指定日期的批量导入文件
     * 
     * @param accountId
     *            账户编号
     * @param createTime
     *            日期
     * @return 批量导入文件
     * @throws TransactionException
     *             如果读取过程中出现错误
     */
    public BatchImportFile loadBatchImportFile(String accountId, Date createTime)
            throws TransactionException;

    /**
     * 读取所有批量导入文件清单
     * 
     * @return 所有批量导入文件清单
     * @throws TransactionException
     *             如果读取过程中出现错误
     */
    public BatchImportFile[] loadAllBatchImportFiles()
            throws TransactionException;

    /**
     * 备份指定账户的指定日期的批量导入文件
     * 
     * @param accountId
     *            账户编号
     * @param createTime
     *            日期
     */
    public void backupBatchImportFile(String accountId, Date createTime);

    /**
     * 读取所有已开通批量导入文件交易功能的商户编号清单
     * 
     * @return 所有已开通批量导入文件交易功能的商户编号清单
     * @throws TransactionException
     *             如果读取过程中出现错误
     */
    public String[] loadAllAccountIds() throws TransactionException;

    /**
     * 读取指定账户编号的所有批量导入文件清单
     * 
     * @param accountId
     *            账户编号
     * @return 指定账户编号的所有批量导入文件清单
     * @throws TransactionException
     *             如果读取过程中出现错误
     */
    public BatchImportFile[] loadBatchImportFilesByAccountId(String accountId)
            throws TransactionException;

}